/**
 * 从有序顺序表中删除其值在给定值s与t之间（要求s<t）的所有元素，如果s或t不合理或顺序表为空，则显示出错信息并退出运行
 *
 */
#include <stdio.h>
#include <stdlib.h>

#define MAXSIZE 100
// 没有boolean类型，使用枚举定义
//typedef enum {
//    FALSE = 0, //逻辑假
//    TRUE = 1 //逻辑真
//} bool;

typedef struct Arr {
    int data[MAXSIZE];
    int length;
} arr;

void printList(arr *L) {
    for (int i = 0; i < L->length; i++) {
        printf("%d ", L->data[i]);
    }
}

int Del_s_t(arr *L, int s, int t) {
    //删除有序顺序表中值在给定值s与t之间的所有元素
    int i, j;
    if (s >= t || L->length == 0) {
        return 0;
    }
    //查找第一个大于等于s的元素位置
    for (i = 0; i < L->length && L->data[i] < s; i++);
    if (i >= L->length) {
        //所有的元素都小于s，s不合理，显示出错信息false,并返回
        return 0;
    }
    //查找第一个大于t的元素位置
    for (j = i; j < L->length && L->data[j] <= t; j++);

    for (; j < L->length; i++, j++) {
        //前移，填补被删元素的位置
        L->data[i] = L->data[j];
    }
    L->length = i;
    return 1;
}

int main() {
    arr *L;
    L = (arr *) malloc(sizeof(arr));
    printf("请输入表元素个数：");
    scanf("%d", &L->length);
    printf("请输入元素值：");
    for (int i = 0; i < L->length; i++) {
        scanf("%d", &L->data[i]);
    }
//    printList(L);
    Del_s_t(L, 2, 5);
    printList(L);
}

